package be.ipl.finito.usecases;

import java.util.List;

import javax.ejb.ObjectNotFoundException;
import javax.ejb.Remote;

import be.ipl.finito.domaine.Jeton;
import be.ipl.finito.domaine.Joueur;
import be.ipl.finito.domaine.Partie;
import be.ipl.finito.exceptions.ActionImpossibleException;
import be.ipl.finito.exceptions.CreationPartieImpossibleException;
import be.ipl.finito.exceptions.JoueurDejaPresentException;
import be.ipl.finito.exceptions.PartieExistanteException;

@Remote
public interface GestionPartie {

	Partie rejoindrePartie(String nomPartie, Joueur joueur)
			throws ObjectNotFoundException, JoueurDejaPresentException;

	Partie lancerPartie(Partie partie) throws ObjectNotFoundException,
			ActionImpossibleException;

	Partie creerPartie(String nom, Joueur joueur)
			throws PartieExistanteException, CreationPartieImpossibleException;

	Partie reprendrePartie(String nomPartie) throws ObjectNotFoundException;

	int lancerDe(Partie partie) throws ObjectNotFoundException;

	List<Joueur> estVainqueur(Partie partie) throws ObjectNotFoundException;

	Partie suspendrePartie(Partie partie) throws ObjectNotFoundException;

	List<Partie> listerParties();

	List<Partie> listerPartiesSuspendues(Joueur joueur);

	List<Jeton> creerJeton();

	List<Partie> listerPartiesEnAttente();

	Partie getPartie(String nomPartie) throws ObjectNotFoundException;

	Partie commencerTourSuivant(Partie partie) throws ObjectNotFoundException;

	boolean verifierTourFini(Partie partie);
	
	Partie supprimerPartie(Partie partie);
}
